package javatar;

import java.util.Iterator;


public class SprintControlador {
	java.util.Date fecha;
	/* Sprint */
	public Sprint CreaSprint(String SprintId, String FechaInicio, String FechaFinal, String EstadoId, 
			String OrderId, String RestrospectivaId, String RevisionId, String ProyectId) {
		
		Sprint Sprint = new Sprint();
		
		Sprint.setSprintId(SprintId);
		Sprint.setFechaInicio(FechaInicio);
		Sprint.setFechaFinal(FechaFinal);
		Sprint.setEstadoId(EstadoId);
		Sprint.setOrderId(OrderId); 
		Sprint.setRestrospectivaId(RestrospectivaId); 
		Sprint.setRevisionId(RevisionId);
		Sprint.setProyectId(ProyectId);
		return Sprint;
	}

	public Respuesta EnviaSprint(Sprint Sprint, Repositorio repositorio) {
		{

			Respuesta respuesta = new Respuesta();
			fecha = new java.util.Date();
			respuesta.setFechaRespuesta(fecha);
			try {
				if (repositorio.Sprints.containsKey(Sprint.getSprintId()) == true) {
					respuesta.setCodigoRespuesta(-1);
					respuesta
							.setDescripcionRespuesta("Ya existe el Sprint con este identificador");
				} else {
					if (repositorio.Estados.containsKey(Sprint.getEstadoId()) == false) {
						respuesta.setCodigoRespuesta(-1);
						respuesta
								.setDescripcionRespuesta("No Existe el Estado con este identificador : "
										+ Sprint.getEstadoId());

					} else {
						if (repositorio.Proyectos.containsKey(Sprint
								.getProyectId()) == false) {
							respuesta.setCodigoRespuesta(-1);
							respuesta
									.setDescripcionRespuesta("No Existe el Proyecto con este identificador : "
											+ Sprint.getProyectId());
						} else {

							if (Sprint.getFechaInicio().isEmpty() || Sprint.getFechaFinal().isEmpty() ){
								respuesta.setCodigoRespuesta(-1);								  
								respuesta.setDescripcionRespuesta("Las Fechas deben tener Valor "
												+ "Incio : " + Sprint.getFechaInicio() 
												+ " - Final : " + Sprint.getFechaFinal());								
							} else {
							repositorio.Sprints.put(Sprint.getSprintId(),
									Sprint);
							respuesta.setCodigoRespuesta(0);
							respuesta
									.setDescripcionRespuesta("Grabacion Correcta");
							}
						}
					}
				}

			} catch (Exception e) {
				System.out.println(e.getMessage());
				respuesta.setCodigoRespuesta(1);
				respuesta.setFechaRespuesta(fecha);
				respuesta.setDescripcionRespuesta(e.getMessage());
			}
			return respuesta;
		}
	}

	
	public Respuesta EliminaSprint(String SprintId, Repositorio repositorio) {
		
		Respuesta respuesta = new Respuesta();
		fecha = new java.util.Date();
		respuesta.setFechaRespuesta(fecha);
		try {
			if (repositorio.Sprints.get(SprintId).getEstadoId() == "3") {
				respuesta.setCodigoRespuesta(-1);
				respuesta
						.setDescripcionRespuesta("El Sprint esta en Estado FINALIZADO");
				respuesta.setFechaRespuesta(new java.util.Date());
				
			} else {
				repositorio.Sprints.remove(SprintId);
				 
				respuesta.setCodigoRespuesta(0);
				respuesta.setDescripcionRespuesta("Eliminacion Correcta");
				respuesta.setFechaRespuesta(new java.util.Date());
			}

		} catch (Exception e) {
			System.out.println(e.getMessage());
			respuesta.setCodigoRespuesta(1);
			respuesta.setFechaRespuesta(fecha);
			respuesta.setDescripcionRespuesta(e.getMessage());
		}
		return respuesta;
	}
        
	     
	public Respuesta ModificaSprint(Sprint Sprint, Repositorio repositorio) {

		Respuesta respuesta = new Respuesta();
		fecha = new java.util.Date();
		respuesta.setFechaRespuesta(fecha);
		try {
			if (repositorio.Sprints.containsKey(Sprint.getSprintId()) == true) {
				if (repositorio.Sprints.get(Sprint.getSprintId()).getEstadoId() == "3") {
					respuesta.setCodigoRespuesta(-1);
					respuesta.setDescripcionRespuesta("El Sprint esta en Estado FINALIZADO");
				} else {
					if (repositorio.Proyectos.containsKey(Sprint
							.getProyectId()) == false) {
						respuesta.setCodigoRespuesta(-1);
						respuesta.setDescripcionRespuesta("No Existe el Proyecto con este identificador "
										+ Sprint.getEstadoId());
					} else {
					repositorio.Sprints.put(Sprint.getSprintId(), Sprint);
					respuesta.setCodigoRespuesta(0);
					respuesta.setDescripcionRespuesta("Modificacion Correcta");
					}
				}
			} else {
				respuesta.setCodigoRespuesta(-1);
				respuesta.setDescripcionRespuesta("No existe el Sprint ");
			}

		} catch (Exception e) {
			System.out.println(e.getMessage());
			respuesta.setCodigoRespuesta(1);
			respuesta.setFechaRespuesta(fecha);
			respuesta.setDescripcionRespuesta(e.getMessage());
		}
		return respuesta;
	}
	 	
/* Revision */
		public RevisionSprint CreaRevisionSprint(String RevisionId,
				String RevisionDesc,
				String SprintId,
				String FechaPresentacionDemo,				
				String Condiciones,
				String FechadeRevision,
				String TiempoRevision,
				String ProyectId)
		{
			RevisionSprint RevisionSprint = new RevisionSprint();
			
			RevisionSprint.setRevisionId(RevisionId);
			RevisionSprint.setSprintId(SprintId);
			RevisionSprint.setRevisionDesc(RevisionDesc);			
			RevisionSprint.setFechaPresentacionDemo(FechaPresentacionDemo);
			RevisionSprint.setCondiciones(Condiciones);
			RevisionSprint.setFechadeRevision(FechadeRevision);
			RevisionSprint.setTiempoRevision(TiempoRevision);
			RevisionSprint.setProyectId(ProyectId);
			return RevisionSprint;
		 	}

		public Respuesta EnviaRevisionSprint(RevisionSprint RevisionSprint, Repositorio repositorio) {
			{
				Respuesta respuesta = new Respuesta();
				fecha = new java.util.Date();
				respuesta.setFechaRespuesta(fecha);
				try {
					if (repositorio.Revisiones.containsKey(RevisionSprint.getRevisionId()) == true) {
						respuesta.setCodigoRespuesta(-1);
						respuesta
								.setDescripcionRespuesta("Ya existe el Sprint de Revision con este identificador");
					} else {
						if (repositorio.Proyectos.containsKey(RevisionSprint.getProyectId())== false){
							respuesta.setCodigoRespuesta(-1);
							respuesta
									.setDescripcionRespuesta("No Existe el Proyecto con este Identificador : " + RevisionSprint.getProyectId());								
						}else {							
						if (repositorio.Proyectos.get(RevisionSprint.getProyectId()).getEstadoId() == "3"){
							respuesta.setCodigoRespuesta(-1);
							respuesta.setDescripcionRespuesta("El Proyecto ha Finalizado " + RevisionSprint.getProyectId());															
							}
						else{		
							
						repositorio.Revisiones.put(RevisionSprint.getRevisionId(), RevisionSprint);
						respuesta.setCodigoRespuesta(0);
						respuesta.setDescripcionRespuesta("Grabacion Correcta");
					}
					}
				}
				} catch (Exception e) {
					System.out.println(e.getMessage());
					respuesta.setCodigoRespuesta(1);
					respuesta.setFechaRespuesta(fecha);
					respuesta.setDescripcionRespuesta(e.getMessage());
				}
				return respuesta;
			}
		}
		public Respuesta ModificaRevision(RevisionSprint RevisionSprint, Repositorio repositorio) {

			Respuesta respuesta = new Respuesta();
			fecha = new java.util.Date();
			respuesta.setFechaRespuesta(fecha);
			try {
				if (repositorio.Sprints.containsKey(RevisionSprint.getSprintId()) == true) {
					if (repositorio.Sprints.get(RevisionSprint.getSprintId()).getEstadoId() == "3") {
						respuesta.setCodigoRespuesta(-1);
						respuesta
								.setDescripcionRespuesta("El Sprint esta en Estado FINALIZADO");
					} else {
						repositorio.Revisiones.put(RevisionSprint.getRevisionId(), RevisionSprint);
						respuesta.setCodigoRespuesta(0);
						respuesta.setDescripcionRespuesta("Modificacion Correcta");
					}
				} else {
					respuesta.setCodigoRespuesta(-1);
					respuesta.setDescripcionRespuesta("No existe el Sprint ");
				}

			} catch (Exception e) {
				System.out.println(e.getMessage());
				respuesta.setCodigoRespuesta(1);
				respuesta.setFechaRespuesta(fecha);
				respuesta.setDescripcionRespuesta(e.getMessage());
			}
			return respuesta;
		}	 	
		public Respuesta EliminaRevision(String RevisionId, Repositorio repositorio) {

			Respuesta respuesta = new Respuesta();
			fecha = new java.util.Date();
			respuesta.setFechaRespuesta(fecha);
			try {
				if (repositorio.Revisiones.containsKey(RevisionId) == true) {
					if (repositorio.Sprints.get(repositorio.Revisiones.get(RevisionId).getSprintId()).getEstadoId() == "3") {
						respuesta.setCodigoRespuesta(-1);
						respuesta
								.setDescripcionRespuesta("El Sprint esta en Estado FINALIZADO");
					} else {
						repositorio.Revisiones.remove(RevisionId);
						respuesta.setCodigoRespuesta(0);
						respuesta.setDescripcionRespuesta("Eliminacion Correcta");
					}
				} else {
					respuesta.setCodigoRespuesta(-1);
					respuesta.setDescripcionRespuesta("No existe la Revision ");
				}

			} catch (Exception e) {
				System.out.println(e.getMessage());
				respuesta.setCodigoRespuesta(1);
				respuesta.setFechaRespuesta(fecha);
				respuesta.setDescripcionRespuesta(e.getMessage());
			}
			return respuesta;
		}	 			 			 	
/* RetrospectivaSprint*/
			public RetrospectivaSprint CreaRetrospectiva(String RetrospectivaId,
					String UsuId,
					String SprintId,
					String Comentarios,					
					String Acuerdos,
					String FechadeReunion,
					String TiempoReunion,
					String ProyectId){									
				RetrospectivaSprint RetrospectivaSprint = new RetrospectivaSprint();
				
				RetrospectivaSprint.setRetrospectivaId(RetrospectivaId);
				RetrospectivaSprint.setUsuId(UsuId);
				RetrospectivaSprint.setSprintId(SprintId);				
				RetrospectivaSprint.setComentarios(Comentarios);
				RetrospectivaSprint.setAcuerdos(Acuerdos);
				RetrospectivaSprint.setFechadeReunion(FechadeReunion);
				RetrospectivaSprint.setTiempoReunion(TiempoReunion);
				RetrospectivaSprint.setProyectId(ProyectId);
				return RetrospectivaSprint;
			 	}

			public Respuesta EnviaRetrospectivaSprint(RetrospectivaSprint RetrospectivaSprint, Repositorio repositorio) {
				{
					Respuesta respuesta = new Respuesta();
					fecha = new java.util.Date();
					respuesta.setFechaRespuesta(fecha);
					try {
						if (repositorio.Retrospectivas.containsKey(RetrospectivaSprint.getRetrospectivaId()) == true) {
							respuesta.setCodigoRespuesta(-1);
							respuesta
									.setDescripcionRespuesta("Ya existe este identificador.Retrospectiva");
						} else {
							if (repositorio.Proyectos.containsKey(RetrospectivaSprint.getProyectId())== false){
								respuesta.setCodigoRespuesta(-1);
								respuesta
										.setDescripcionRespuesta("No Existe el Proyecto con este Identificador : " + RetrospectivaSprint.getProyectId());								
							}else {
							repositorio.Retrospectivas.put(RetrospectivaSprint.getRetrospectivaId(), RetrospectivaSprint);
							respuesta.setCodigoRespuesta(0);
							respuesta.setDescripcionRespuesta("Grabacion Correcta");
						}
						}
					} catch (Exception e) {
						System.out.println(e.getMessage());
						respuesta.setCodigoRespuesta(1);
						respuesta.setFechaRespuesta(fecha);
						respuesta.setDescripcionRespuesta(e.getMessage());
					}
					return respuesta;
				}
			}
	
			public Respuesta EliminaRetrospectiva(String RetrospectivaId, Repositorio repositorio) {

				Respuesta respuesta = new Respuesta();
				fecha = new java.util.Date();
				respuesta.setFechaRespuesta(fecha);
				try {
					if (repositorio.Retrospectivas.containsKey(RetrospectivaId) == true) {
						if (repositorio.Sprints.get(repositorio.Retrospectivas.get(RetrospectivaId).getSprintId()).getEstadoId() == "3") {
							respuesta.setCodigoRespuesta(-1);
							respuesta
									.setDescripcionRespuesta("El Sprint esta en Estado FINALIZADO");
						} else {
							repositorio.Retrospectivas.remove(RetrospectivaId);
							respuesta.setCodigoRespuesta(0);
							respuesta.setDescripcionRespuesta("Eliminacion Correcta");
						}
					} else {
						respuesta.setCodigoRespuesta(-1);
						respuesta.setDescripcionRespuesta("No existe la Restrospectiva ");
					}

				} catch (Exception e) {
					System.out.println(e.getMessage());
					respuesta.setCodigoRespuesta(1);
					respuesta.setFechaRespuesta(fecha);
					respuesta.setDescripcionRespuesta(e.getMessage());
				}
				return respuesta;
			}	 			 			 	

				
	public String GeneraIdSprint(Repositorio repositorio) {
		String CodigoId = "1";
		if (!repositorio.Sprints.isEmpty()) {			 
			CodigoId = String.valueOf(repositorio.Sprints.size() + 1);
		}
		return CodigoId;
	}
		
	public String GeneraIdRevision(Repositorio repositorio) {
		String CodigoId = "1";
		if (!repositorio.Revisiones.isEmpty()) {			 
			CodigoId = String.valueOf(repositorio.Revisiones.size() + 1);
		}
		return CodigoId;
	}				
	
	public String GeneraIdRetrospectiva(Repositorio repositorio) {
		String CodigoId = "1";
		if (!repositorio.Retrospectivas.isEmpty()) {			 
			CodigoId = String.valueOf(repositorio.Retrospectivas.size() + 1);
		}
		return CodigoId;
	}				

	   //////////////////// VERIFICA SI TODOS LOS SPRINT ESTAN FINALIZADOS - CIERRA EL PROYECTO
	public Respuesta EvaluarCerrarProyecto(Proyecto Proyecto, Repositorio repositorio) {
		Respuesta respuesta = new Respuesta();
		fecha = new java.util.Date();	
		respuesta.setFechaRespuesta(fecha);
		Iterator<java.util.Map.Entry<String, Sprint>> it = repositorio.Sprints
				.entrySet().iterator();
 
		Boolean FlgCerrado = true;
		while (it.hasNext()) {
			java.util.Map.Entry<String, Sprint> pair = it.next();
			if (pair.getValue().getProyectId() == Proyecto.getProyectId()) {
				if (pair.getValue().getEstadoId() != "3") {
					FlgCerrado = false;
				}
			}
		}
		if (FlgCerrado) {			 
			repositorio.Proyectos.put(Proyecto.getProyectId(), Proyecto);
			respuesta.setCodigoRespuesta(0);
			respuesta.setDescripcionRespuesta("Grabacion Correcta");}
			else
			{
				respuesta.setCodigoRespuesta(-1);
				respuesta.setDescripcionRespuesta("Existen Sprint En Proceso ");		
			}		
		return respuesta;
	}
}
